package com.queue.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.BindingBuilder.TopicExchangeRoutingKeyConfigurer;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @comments 这种模式可以根据routingKey的不同绑定到不同的队列，接收不同的消息。
* @author  zg
* @date 2018年11月11日
*/
@Configuration
public class TopicConfig {

	public final static String topic_exchange = "topic-exchange";
	
	public final static String topic_queue_1 = "topic_queue_1";
	public final static String topic_queue_2 = "topic_queue_2";
	
	
	
	public final static String topic_routingKey1 = "topic.message";
	public final static String topic_routingKey2 = "topicNews.#";////符号“#”匹配一个或多个词，符号“*”匹配一个词

	/**
	 * 创建队列1
	 * @author zg
	 * @date 2018年11月11日
	 * @return
	 */
    @Bean
    public Queue topicQueue1() {
        return new Queue(TopicConfig.topic_queue_1);
    }

	/**
	 * 创建队列2
	 * @author zg
	 * @date 2018年11月11日
	 * @return
	 */
    @Bean
    public Queue topicQueue2() {
        return new Queue(TopicConfig.topic_queue_2);
    }

    /**
     * 创建交换机
     * @author zg
     * @date 2018年11月11日
     * @return
     */
    @Bean
    TopicExchange exchange() {
        return new TopicExchange(topic_exchange);
    }

    /**
     * 绑定队列1
     * @author zg
     * @date 2018年11月11日
     * @param queueMessage
     * @param exchange
     * @return
     */
    @Bean
    Binding bindingExchangeMessage(Queue topicQueue1, TopicExchange exchange) {
        return BindingBuilder.bind(topicQueue1).to(exchange).with(topic_routingKey1);
    }

    /**
     * 绑定队列2
     * @author zg
     * @date 2018年11月11日
     * @param queueMessage
     * @param exchange
     * @return
     */
    @Bean
    Binding bindingExchangeMessages(Queue topicQueue2, TopicExchange exchange) {
        return BindingBuilder.bind(topicQueue2).to(exchange).with(topic_routingKey2);
    }
}
